// run

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test basic operations on bool.

package main

type s struct {
	a bool
	b bool
}

func main() {
	var a, b bool

	a = true
	b = false

	if !a {
		panic(1)
	}
	if b {
		panic(2)
	}
	if !!!a {
		panic(3)
	}
	if !!b {
		panic(4)
	}

	a = !b
	if !a {
		panic(5)
	}
	if !!!a {
		panic(6)
	}

	var x *s
	x = new(s)
	x.a = true
	x.b = false

	if !x.a {
		panic(7)
	}
	if x.b {
		panic(8)
	}
	if !!!x.a {
		panic(9)
	}
	if !!x.b {
		panic(10)
	}

	x.a = !x.b
	if !x.a {
		panic(11)
	}
	if !!!x.a {
		panic(12)
	}

	/*
	 * test &&
	 */
	a = true
	b = true
	if !(a && b) {
		panic(21)
	}
	if a && !b {
		panic(22)
	}
	if !a && b {
		panic(23)
	}
	if !a && !b {
		panic(24)
	}

	a = false
	b = true
	if !(!a && b) {
		panic(31)
	}
	if !a && !b {
		panic(32)
	}
	if a && b {
		panic(33)
	}
	if a && !b {
		panic(34)
	}

	a = true
	b = false
	if !(a && !b) {
		panic(41)
	}
	if a && b {
		panic(41)
	}
	if !a && !b {
		panic(41)
	}
	if !a && b {
		panic(44)
	}

	a = false
	b = false
	if !(!a && !b) {
		panic(51)
	}
	if !a && b {
		panic(52)
	}
	if a && !b {
		panic(53)
	}
	if a && b {
		panic(54)
	}

	/*
	 * test ||
	 */
	a = true
	b = true
	if !(a || b) {
		panic(61)
	}
	if !(a || !b) {
		panic(62)
	}
	if !(!a || b) {
		panic(63)
	}
	if !a || !b {
		panic(64)
	}

	a = false
	b = true
	if !(!a || b) {
		panic(71)
	}
	if !(!a || !b) {
		panic(72)
	}
	if !(a || b) {
		panic(73)
	}
	if a || !b {
		panic(74)
	}

	a = true
	b = false
	if !(a || !b) {
		panic(81)
	}
	if !(a || b) {
		panic(82)
	}
	if !(!a || !b) {
		panic(83)
	}
	if !a || b {
		panic(84)
	}

	a = false
	b = false
	if !(!a || !b) {
		panic(91)
	}
	if !(!a || b) {
		panic(92)
	}
	if !(a || !b) {
		panic(93)
	}
	if a || b {
		panic(94)
	}
}
